package com.hr.runnerbuddy;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter {
	
	private static final String DB_NAME = "rbdb";
	private static final int DB_VERSION = 1;

	// Alle tabellen
	private static final String PARCOUR_TABLE = "Parcour";
	private static final String PARCOURP_TABLE = "Parcourpunten";
	private static final String LOOPSESSIE_TABLE = "Loopsessie";
	private static final String LOOPSESSIEP_TABLE = "Loopsessiepunten";

	// column namen parcour
	public static final String PARCOUR_ID = "parcour_id";
	public static final String PARCOUR_NAAM = "naam";
	public static final String PARCOUR_LENGTE = "lengte";
	public static final String PARCOUR_PLAATJE = "plaatje";

	// column namen parcourpunten
	public static final String PARCOURP_ID = "parcourpunten_id";
	public static final String PARCOURP_LONGITUDE = "longitude";
	public static final String PARCOURP_LATITUDE = "latitude";

	// column namen loopsessie
	public static final String LOOPSESSIE_ID = "loopsessie_id";
	public static final String LOOPSESSIE_TIMESTAMP = "timestamp";

	// colum namen loopsessiepunten
	public static final String LOOPSESSIEP_ID = "loopsessiepunten_id";
	public static final String LOOPSESSIEP_AFSTAND = "afstand";
	public static final String LOOPSESSIEP_TIMESTAMP = "timestamp";
	public static final String LOOPSESSIEP_SNELHEID = "snelheid";

	private DbHelper helper;
	private SQLiteDatabase database;
	private final Context context;

	private static class DbHelper extends SQLiteOpenHelper {

		public DbHelper(Context context) {
			super(context, DB_NAME, null, DB_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// Aanmaken Parcour tabel
			String sql = "CREATE TABLE " + PARCOUR_TABLE + " (" + PARCOUR_ID
					+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + PARCOUR_NAAM
					+ " TEXT, " + PARCOUR_LENGTE + " INTEGER NOT NULL, "
					+ PARCOUR_PLAATJE + " BLOB NOT NULL);";

			db.execSQL(sql);

			// Aanmaken Parcourpunten tabel
			sql = "CREATE TABLE " + PARCOURP_TABLE + " (" + PARCOURP_ID
					+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + PARCOUR_ID
					+ " INTEGER, " + PARCOURP_LONGITUDE + " REAL NOT NULL, "
					+ PARCOURP_LATITUDE + " REAL NOT NULL, " + "FOREIGN KEY("
					+ PARCOUR_ID + ") references Parcour(" + PARCOUR_ID + "));";

			db.execSQL(sql);

			// Aanmaken Loopsessie tabel
			sql = "CREATE TABLE " + LOOPSESSIE_TABLE + " (" + LOOPSESSIE_ID
					+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + PARCOUR_ID
					+ " INTEGER, " + LOOPSESSIE_TIMESTAMP + " BLOB,"
					+ "FOREIGN KEY(" + PARCOUR_ID + ") REFERENCES Parcour("
					+ PARCOUR_ID + "));";

			db.execSQL(sql);

			// Aanmaken Loopsessiepunten tabel
			sql = "CREATE TABLE " + LOOPSESSIEP_TABLE + " (" + LOOPSESSIEP_ID
					+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
					+ LOOPSESSIEP_AFSTAND + " INTEGER, "
					+ LOOPSESSIEP_TIMESTAMP + " BLOB, " + LOOPSESSIEP_SNELHEID
					+ "INTEGER, " + LOOPSESSIE_ID + " INTEGER, "
					+ "FOREIGN KEY(" + LOOPSESSIE_ID
					+ ") REFERENCES Loopsessie(" + LOOPSESSIE_ID + "));";

			db.execSQL(sql);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// Verwijder tabellen + Data
			db.execSQL("DROP TABLE IF EXISTS " + PARCOUR_TABLE);
			db.execSQL("DROP TABLE IF EXISTS " + PARCOURP_TABLE);
			db.execSQL("DROP TABLE IF EXISTS " + LOOPSESSIE_TABLE);
			db.execSQL("DROP TABLE IF EXISTS " + LOOPSESSIEP_TABLE);

			// Maak tabellen opnieuw aan
			onCreate(db);
		}

	}

	public DBAdapter(Context c) {
		context = c;
	}

	public DBAdapter open() {
		helper = new DbHelper(context);
		database = helper.getWritableDatabase();
		return this;
	}

	public void close() {
		helper.close();
	}

	public void addParcour(String naam, int lengte, String plaatje) {
		ContentValues content = new ContentValues();
		content.put(PARCOUR_NAAM, naam);
		content.put(PARCOUR_LENGTE, lengte);
		content.put(PARCOUR_PLAATJE, plaatje);
		database.insert(PARCOUR_TABLE, null, content);
	}

	public Cursor getAllParcours() {
		String[] columns = new String[] { PARCOUR_ID, PARCOUR_NAAM,
				PARCOUR_LENGTE, PARCOUR_PLAATJE };
		return database.query(PARCOUR_TABLE, columns, null, null, null, null,
				null);
	}

	public Cursor getParcour(int parcourid) {
		String[] columns = new String[] { PARCOUR_ID, PARCOUR_NAAM,
				PARCOUR_LENGTE, PARCOUR_PLAATJE };
		Cursor c = database.query(PARCOUR_TABLE, columns, PARCOUR_ID + "="
				+ parcourid, null, null, null, null);
		return c;
	}

	public void addParcourPunten(int parcourID, double longitude,
			double latitude) {
		ContentValues content = new ContentValues();
		content.put(PARCOUR_ID, parcourID);
		content.put(PARCOURP_LONGITUDE, longitude);
		content.put(PARCOURP_LATITUDE, latitude);
		database.insert(PARCOURP_TABLE, null, content);
	}

	public Cursor getParcourpunt(int parcourid, int puntid) {
		String[] columns = new String[] { PARCOURP_ID, PARCOUR_ID,
				PARCOURP_LONGITUDE, PARCOURP_LATITUDE };
		Cursor c = database.query(PARCOURP_TABLE, columns, PARCOUR_ID + "="
				+ parcourid + " AND " + PARCOURP_ID + "=" + puntid, null, null,
				null, null);
		return c;
	}

	public Cursor getParcourpunten(int parcourid) {
		String[] columns = new String[] { PARCOURP_ID, PARCOUR_ID,
				PARCOURP_LONGITUDE, PARCOURP_LATITUDE };
		Cursor c = database.query(PARCOURP_TABLE, columns, PARCOUR_ID + "="
				+ parcourid, null, null, null, null);
		return c;
	}

	public void addLoopsessie(int parcourID, String timestamp, double snelheid) {
		ContentValues content = new ContentValues();
		content.put(PARCOUR_ID, parcourID);
		content.put(LOOPSESSIE_TIMESTAMP, timestamp);
		content.put(LOOPSESSIEP_SNELHEID, snelheid);
		database.insert(LOOPSESSIE_TABLE, null, content);
	}

	public Cursor getLoopsessie(int parcourid, int loopsessieid) {
		String[] columns = new String[] { LOOPSESSIE_ID, PARCOUR_ID,
				LOOPSESSIEP_AFSTAND, LOOPSESSIE_TIMESTAMP, };
		Cursor c = database.query(LOOPSESSIE_TABLE, columns, PARCOUR_ID + "="
				+ parcourid + " AND " + LOOPSESSIE_ID + "=" + loopsessieid,
				null, null, null, null);

		return c;
	}

	public Cursor getAllLoopsessies(int parcourid) {
		String[] columns = new String[] { LOOPSESSIE_ID, PARCOUR_ID,
				LOOPSESSIEP_AFSTAND, LOOPSESSIE_TIMESTAMP };
		Cursor c = database.query(LOOPSESSIE_TABLE, columns, PARCOUR_ID + "="
				+ parcourid, null, null, null, null);

		return c;
	}

	public void addLoopsessiePunten(int afstand, String timestamp,
			int loopsessieid) {
		ContentValues content = new ContentValues();
		content.put(LOOPSESSIEP_AFSTAND, afstand);
		content.put(LOOPSESSIEP_TIMESTAMP, timestamp);
		content.put(LOOPSESSIE_ID, loopsessieid);
		database.insert(LOOPSESSIEP_TABLE, null, content);
	}

	public Cursor getLoopsessiePunt(int loopsessieid, int puntid) {
		String[] columns = new String[] {LOOPSESSIEP_ID, LOOPSESSIEP_AFSTAND, LOOPSESSIEP_SNELHEID, LOOPSESSIE_ID};
		Cursor c = database.query(LOOPSESSIEP_TABLE, columns, LOOPSESSIE_ID + "="
				+ loopsessieid + " AND " + LOOPSESSIEP_ID + "=" + puntid,
				null, null, null, null);;
		return c;
	}

	public Cursor getAllLoopsessiePunten(int loopsessieid) {
		String[] columns = new String[] {LOOPSESSIEP_ID, LOOPSESSIEP_AFSTAND, LOOPSESSIEP_SNELHEID, LOOPSESSIE_ID};
		Cursor c = database.query(LOOPSESSIEP_TABLE, columns, LOOPSESSIE_ID + "="
				+ loopsessieid,
				null, null, null, null);;
		return c;
	}

}